package com.seafile.seadroid2.framework.monitor;

import android.util.Log;

import com.google.common.collect.Maps;
import com.seafile.seadroid2.account.Account;
import com.seafile.seadroid2.account.SupportAccountManager;

import org.apache.commons.io.monitor.FileAlterationMonitor;

import java.util.List;
import java.util.Map;

@Deprecated
public class SeafileMonitor {
//    private static final String DEBUG_TAG = "SeafileMonitor";
//
//    private Map<Account, SeafileObserver> observers = Maps.newHashMap();
//    private FileAlterationMonitor alterationMonitor = new FileAlterationMonitor();
//    private CachedFileChangedListener listener;
//    private boolean started;
//
//    public SeafileMonitor(CachedFileChangedListener listener) {
//        this.listener = listener;
//    }
//
//    public boolean isStarted() {
//        return started;
//    }
//
//    private synchronized void monitorFilesForAccount(Account account) {
//        if (observers.containsKey(account)) {
//            return;
//        }
//        SeafileObserver fileObserver = new SeafileObserver(account, listener);
//        addObserver(fileObserver);
//        observers.put(account, fileObserver);
//    }
//
//    public synchronized void stopMonitorFilesForAccount(Account account) {
//        SeafileObserver fileObserver = observers.get(account);
//        if (fileObserver != null)
//            removeObserver(fileObserver);
//
//        observers.remove(account);
//    }
//
//    private void addObserver(SeafileObserver fileObserver) {
//        alterationMonitor.addObserver(fileObserver.getAlterationObserver());
//    }
//
//    private void removeObserver(SeafileObserver fileObserver) {
//        alterationMonitor.removeObserver(fileObserver.getAlterationObserver());
//    }
//
//    public synchronized void onFileDownloaded(Account account, String repoID, String repoName,
//                                              String pathInRepo, String localPath) {
//        SeafileObserver observer = observers.get(account);
//        if (observer == null)
//            return;
//        observer.watchDownloadedFile(repoID, repoName, pathInRepo, localPath);
//    }
//
//    private void start() throws Exception {
//        if (!started) {
//            alterationMonitor.start();
//            started = true;
//        }
//    }
//
//    public void stop() throws Exception {
//        alterationMonitor.stop();
//    }
//
//    /**
//     * Watch cached files for all accounts
//     */
//    public synchronized void monitorAllAccounts() {
//        List<Account> accounts = SupportAccountManager.getInstance().getAccountList();
//        for (Account account : accounts) {
//            monitorFilesForAccount(account);
//        }
//
//        try {
//            start();
//            Log.d(DEBUG_TAG, "monitor started");
//        } catch (Exception e) {
//            Log.w(DEBUG_TAG, "failed to start file monitor");
//            throw new RuntimeException("failed to start file monitor");
//        }
//    }
}
